ce5707c36997d3762d2cc6c009c6ead74fbfb2a9,engine/src/org/pentaho/di/trans/steps/validator/Validator.java,Validator,validateFields,#RowMetaInterface#Object[]#,238

Before Change


              new KettleValidatorException( this, field, KettleValidatorException.ERROR_UNEXPECTED_DATA_TYPE,
                  BaseMessages.getString( PKG, "Validator.Exception.UnexpectedDataType", field.getFieldName(),
                      valueMeta.toStringMeta(), validatorMeta.toStringMeta() ), field.getFieldName() );
          if ( meta.isValidatingAll() ) {
            exceptions.add( exception );
          } else {
            throw exception;
          }
        }
      }

      // Check various things if the value is not null..
      //
      if ( !isNull ) {

        if ( data.fieldsMinimumLengthAsInt[i] >= 0 || data.fieldsMaximumLengthAsInt[i] >= 0
            || data.minimumValue[i] != null || data.maximumValue[i] != null || data.listValues[i].length > 0
            || field.isSourcingValues() || !Const.isEmpty( data.startString[i] ) || !Const.isEmpty( data.endString[i] )
            || !Const.isEmpty( data.startStringNotAllowed[i] ) || !Const.isEmpty( data.endStringNotAllowed[i] )
            || field.isOnlyNumericAllowed() || data.patternExpected[i] != null || data.patternDisallowed[i] != null ) {

          String stringValue = valueMeta.getString( valueData );
          int stringLength = stringValue.length();

          // Minimum length
          //
          // if (field.getMinimumLength()>=0 && stringValue.length()<field.getMinimumLength() ) {
          if ( data.fieldsMinimumLengthAsInt[i] >= 0 && stringLength < data.fieldsMinimumLengthAsInt[i] ) {
            KettleValidatorException exception =
                new KettleValidatorException( this, field, KettleValidatorException.ERROR_SHORTER_THAN_MINIMUM_LENGTH,
                    BaseMessages.getString( PKG, "Validator.Exception.ShorterThanMininumLength", field.getFieldName(),
                        valueMeta.getString( valueData ), Integer.toString( stringValue.length() ), field
                            .getMinimumLength() ), field.getFieldName() );
            if ( meta.isValidatingAll() ) {
              exceptions.add( exception );
            } else {
              throw exception;
            }
          }

          // Maximum length
          //
          // if (field.getMaximumLength()>=0 && stringValue.length()>field.getMaximumLength() ) {
          if ( data.fieldsMaximumLengthAsInt[i] >= 0 && stringLength > data.fieldsMaximumLengthAsInt[i] ) {
            KettleValidatorException exception =
                new KettleValidatorException( this, field, KettleValidatorException.ERROR_LONGER_THAN_MAXIMUM_LENGTH,
                    BaseMessages.getString( PKG, "Validator.Exception.LongerThanMaximumLength", field.getFieldName(),
                        valueMeta.getString( valueData ), Integer.toString( stringValue.length() ), field
                            .getMaximumLength() ), field.getFieldName() );
            if ( meta.isValidatingAll() ) {
              exceptions.add( exception );
            } else {
              throw exception;
            }
          }

          // Minimal value
          //
          if ( data.minimumValue[i] != null && valueMeta.compare( valueData, validatorMeta, data.minimumValue[i] ) < 0 ) {
            KettleValidatorException exception =
                new KettleValidatorException( this, field, KettleValidatorException.ERROR_LOWER_THAN_ALLOWED_MINIMUM,
                    BaseMessages.getString( PKG, "Validator.Exception.LowerThanMinimumValue", field.getFieldName(),
                        valueMeta.getString( valueData ), data.constantsMeta[i].getString( data.minimumValue[i] ) ),
                    field.getFieldName() );
            if ( meta.isValidatingAll() ) {
              exceptions.add( exception );
            } else {
              throw exception;
            }
          }

          // Maximum value
          //
          if ( data.maximumValue[i] != null && valueMeta.compare( valueData, validatorMeta, data.maximumValue[i] ) > 0 ) {
            KettleValidatorException exception =
                new KettleValidatorException( this, field, KettleValidatorException.ERROR_HIGHER_THAN_ALLOWED_MAXIMUM,
                    BaseMessages.getString( PKG, "Validator.Exception.HigherThanMaximumValue", field.getFieldName(),
                        valueMeta.getString( valueData ), data.constantsMeta[i].getString( data.maximumValue[i] ) ),
                    field.getFieldName() );
            if ( meta.isValidatingAll() ) {
              exceptions.add( exception );
            } else {
              throw exception;
            }
          }

          // In list?
          //
          if ( field.isSourcingValues() || data.listValues[i].length > 0 ) {
            boolean found = false;
            for ( Object object : data.listValues[i] ) {
              if ( object != null && data.listValues[i] != null
                  && valueMeta.compare( valueData, validatorMeta, object ) == 0 ) {
                found = true;
              }
            }
            if ( !found ) {
              KettleValidatorException exception =
                  new KettleValidatorException( this, field, KettleValidatorException.ERROR_VALUE_NOT_IN_LIST,
                      BaseMessages.getString( PKG, "Validator.Exception.NotInList", field.getFieldName(), valueMeta
                          .getString( valueData ) ), field.getFieldName() );
              if ( meta.isValidatingAll() ) {
                exceptions.add( exception );
              } else {
                throw exception;
              }
            }
          }

          // Numeric data or strings with only
          if ( field.isOnlyNumericAllowed() ) {
            if ( valueMeta.isNumeric() || !containsOnlyDigits( valueMeta.getString( valueData ) ) ) {
              KettleValidatorException exception =
                  new KettleValidatorException( this, field, KettleValidatorException.ERROR_NON_NUMERIC_DATA,
                      BaseMessages.getString( PKG, "Validator.Exception.NonNumericDataNotAllowed",
                          field.getFieldName(), valueMeta.toStringMeta() ), field.getFieldName() );
              if ( meta.isValidatingAll() ) {
                exceptions.add( exception );
              } else {
                throw exception;
              }
            }
          }

          // Does not start with string value
          //
          if ( !Const.isEmpty( data.startString[i] ) && !stringValue.startsWith( data.startString[i] ) ) {
            KettleValidatorException exception =
                new KettleValidatorException( this, field, KettleValidatorException.ERROR_DOES_NOT_START_WITH_STRING,
                    BaseMessages.getString( PKG, "Validator.Exception.DoesNotStartWithString", field.getFieldName(),
                        valueMeta.getString( valueData ), field.getStartString() ), field.getFieldName() );
            if ( meta.isValidatingAll() ) {
              exceptions.add( exception );
            } else {
              throw exception;
            }
          }

          // Ends with string value
          //
          if ( !Const.isEmpty( data.endString[i] ) && !stringValue.endsWith( data.endString[i] ) ) {
            KettleValidatorException exception =
                new KettleValidatorException( this, field, KettleValidatorException.ERROR_DOES_NOT_END_WITH_STRING,
                    BaseMessages.getString( PKG, "Validator.Exception.DoesNotStartWithString", field.getFieldName(),
                        valueMeta.getString( valueData ), field.getEndString() ), field.getFieldName() );
            if ( meta.isValidatingAll() ) {
              exceptions.add( exception );
            } else {
              throw exception;
            }
          }

          // Starts with string value
          //
          if ( !Const.isEmpty( data.startStringNotAllowed[i] )
              && stringValue.startsWith( data.startStringNotAllowed[i] ) ) {
            KettleValidatorException exception =
                new KettleValidatorException( this, field, KettleValidatorException.ERROR_STARTS_WITH_STRING,
                    BaseMessages.getString( PKG, "Validator.Exception.StartsWithString", field.getFieldName(),
                        valueMeta.getString( valueData ), field.getStartStringNotAllowed() ), field.getFieldName() );
            if ( meta.isValidatingAll() ) {
              exceptions.add( exception );
            } else {
              throw exception;
            }
          }

After Change


              new KettleValidatorException( this, field, KettleValidatorException.ERROR_UNEXPECTED_DATA_TYPE,
                  BaseMessages.getString( PKG, "Validator.Exception.UnexpectedDataType", field.getFieldName(),
                      valueMeta.toStringMeta(), validatorMeta.toStringMeta() ), field.getFieldName() );
          exceptions.add( exception );
          if ( !meta.isValidatingAll() ) {
            return exceptions;
          }
        }
      }

      // Check various things if the value is not null..
      //
      if ( !isNull ) {

        if ( data.fieldsMinimumLengthAsInt[i] >= 0 || data.fieldsMaximumLengthAsInt[i] >= 0
            || data.minimumValue[i] != null || data.maximumValue[i] != null || data.listValues[i].length > 0
            || field.isSourcingValues() || !Const.isEmpty( data.startString[i] ) || !Const.isEmpty( data.endString[i] )
            || !Const.isEmpty( data.startStringNotAllowed[i] ) || !Const.isEmpty( data.endStringNotAllowed[i] )
            || field.isOnlyNumericAllowed() || data.patternExpected[i] != null || data.patternDisallowed[i] != null ) {

          String stringValue = valueMeta.getString( valueData );
          int stringLength = stringValue.length();

          // Minimum length
          //
          // if (field.getMinimumLength()>=0 && stringValue.length()<field.getMinimumLength() ) {
          if ( data.fieldsMinimumLengthAsInt[i] >= 0 && stringLength < data.fieldsMinimumLengthAsInt[i] ) {
            KettleValidatorException exception =
                new KettleValidatorException( this, field, KettleValidatorException.ERROR_SHORTER_THAN_MINIMUM_LENGTH,
                    BaseMessages.getString( PKG, "Validator.Exception.ShorterThanMininumLength", field.getFieldName(),
                        valueMeta.getString( valueData ), Integer.toString( stringValue.length() ), field
                            .getMinimumLength() ), field.getFieldName() );
            exceptions.add( exception );
            if ( !meta.isValidatingAll() ) {
              return exceptions;
            }
          }

          // Maximum length
          //
          // if (field.getMaximumLength()>=0 && stringValue.length()>field.getMaximumLength() ) {
          if ( data.fieldsMaximumLengthAsInt[i] >= 0 && stringLength > data.fieldsMaximumLengthAsInt[i] ) {
            KettleValidatorException exception =
                new KettleValidatorException( this, field, KettleValidatorException.ERROR_LONGER_THAN_MAXIMUM_LENGTH,
                    BaseMessages.getString( PKG, "Validator.Exception.LongerThanMaximumLength", field.getFieldName(),
                        valueMeta.getString( valueData ), Integer.toString( stringValue.length() ), field
                            .getMaximumLength() ), field.getFieldName() );
            exceptions.add( exception );
            if ( !meta.isValidatingAll() ) {
              return exceptions;
            }
          }

          // Minimal value
          //
          if ( data.minimumValue[i] != null && valueMeta.compare( valueData, validatorMeta, data.minimumValue[i] ) < 0 ) {
            KettleValidatorException exception =
                new KettleValidatorException( this, field, KettleValidatorException.ERROR_LOWER_THAN_ALLOWED_MINIMUM,
                    BaseMessages.getString( PKG, "Validator.Exception.LowerThanMinimumValue", field.getFieldName(),
                        valueMeta.getString( valueData ), data.constantsMeta[i].getString( data.minimumValue[i] ) ),
                    field.getFieldName() );
            exceptions.add( exception );
            if ( !meta.isValidatingAll() ) {
              return exceptions;
            }
          }

          // Maximum value
          //
          if ( data.maximumValue[i] != null && valueMeta.compare( valueData, validatorMeta, data.maximumValue[i] ) > 0 ) {
            KettleValidatorException exception =
                new KettleValidatorException( this, field, KettleValidatorException.ERROR_HIGHER_THAN_ALLOWED_MAXIMUM,
                    BaseMessages.getString( PKG, "Validator.Exception.HigherThanMaximumValue", field.getFieldName(),
                        valueMeta.getString( valueData ), data.constantsMeta[i].getString( data.maximumValue[i] ) ),
                    field.getFieldName() );
            exceptions.add( exception );
            if ( !meta.isValidatingAll() ) {
              return exceptions;
            }
          }

          // In list?
          //
          if ( field.isSourcingValues() || data.listValues[i].length > 0 ) {
            boolean found = false;
            for ( Object object : data.listValues[i] ) {
              if ( object != null && data.listValues[i] != null
                  && valueMeta.compare( valueData, validatorMeta, object ) == 0 ) {
                found = true;
              }
            }
            if ( !found ) {
              KettleValidatorException exception =
                  new KettleValidatorException( this, field, KettleValidatorException.ERROR_VALUE_NOT_IN_LIST,
                      BaseMessages.getString( PKG, "Validator.Exception.NotInList", field.getFieldName(), valueMeta
                          .getString( valueData ) ), field.getFieldName() );
              exceptions.add( exception );
              if ( !meta.isValidatingAll() ) {
                return exceptions;
              }
            }
          }

          // Numeric data or strings with only
          if ( field.isOnlyNumericAllowed() ) {
            if ( valueMeta.isNumeric() || !containsOnlyDigits( valueMeta.getString( valueData ) ) ) {
              KettleValidatorException exception =
                  new KettleValidatorException( this, field, KettleValidatorException.ERROR_NON_NUMERIC_DATA,
                      BaseMessages.getString( PKG, "Validator.Exception.NonNumericDataNotAllowed",
                          field.getFieldName(), valueMeta.toStringMeta() ), field.getFieldName() );
              exceptions.add( exception );
              if ( !meta.isValidatingAll() ) {
                return exceptions;
              }
            }
          }

          // Does not start with string value
          //
          if ( !Const.isEmpty( data.startString[i] ) && !stringValue.startsWith( data.startString[i] ) ) {
            KettleValidatorException exception =
                new KettleValidatorException( this, field, KettleValidatorException.ERROR_DOES_NOT_START_WITH_STRING,
                    BaseMessages.getString( PKG, "Validator.Exception.DoesNotStartWithString", field.getFieldName(),
                        valueMeta.getString( valueData ), field.getStartString() ), field.getFieldName() );
            exceptions.add( exception );
            if ( !meta.isValidatingAll() ) {
              return exceptions;
            }
          }

          // Ends with string value
          //
          if ( !Const.isEmpty( data.endString[i] ) && !stringValue.endsWith( data.endString[i] ) ) {
            KettleValidatorException exception =
                new KettleValidatorException( this, field, KettleValidatorException.ERROR_DOES_NOT_END_WITH_STRING,
                    BaseMessages.getString( PKG, "Validator.Exception.DoesNotStartWithString", field.getFieldName(),
                        valueMeta.getString( valueData ), field.getEndString() ), field.getFieldName() );
            exceptions.add( exception );
            if ( !meta.isValidatingAll() ) {
              return exceptions;
            }
          }

          // Starts with string value
          //
          if ( !Const.isEmpty( data.startStringNotAllowed[i] )
              && stringValue.startsWith( data.startStringNotAllowed[i] ) ) {
            KettleValidatorException exception =
                new KettleValidatorException( this, field, KettleValidatorException.ERROR_STARTS_WITH_STRING,
                    BaseMessages.getString( PKG, "Validator.Exception.StartsWithString", field.getFieldName(),
                        valueMeta.getString( valueData ), field.getStartStringNotAllowed() ), field.getFieldName() );
            exceptions.add( exception );
            if ( !meta.isValidatingAll() ) {
              return exceptions;
            }
          }